package src;

import java.util.ArrayList;
import java.util.Stack;

/**
 * @version : 1.0.0
 * @author：jacky
 * @date : 2020/1/17
 * 输入个链表的头结点，从尾到头反过来打印出每个结点的值。
 */
public class Third_LinkList {

    public class ListNode {
        int val;
        ListNode next = null;

        ListNode(int val) {
            this.val = val;
        }
    }

    //TODO：解题思路
    /*
    可以利用栈的特性，后进先出，所以可以把这个链表从头到尾压入栈中，
    然后再进行出栈，这个时候尾先出，头在最后,pop到一个list中
     */

    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {

        ArrayList<Integer> arrayList = new ArrayList<>();
        ListNode p = listNode;

        Stack<Integer> stack = new Stack<>();
        while(p != null){
            stack.push(p.val);
            p = p.next;
        }

        int n = stack.size() - 1;
        for(int i = n;i>=0 ; i--){
            arrayList.add(stack.pop());
        }
        return arrayList;
    }


}
